<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*
        增
            数组名[数组名.length] = 值
            push(...元素)：栈方法，入栈，先进后出，在数组的底部添加元素
            unshift(...items: T[]): number;队列方法，入列，先进先出，在顶部添加
            splice(start: number, deleteCount: number, ...items: T[]): T[];
                在顶部添加元素，start为0，在底部添加元素start为length
        删
            pop(): T | undefined;：栈方法，出栈，将最后一元素弹出，并返回
            shift(): T | undefined;队列方法，出列，删除第一个，并返回
            splice(start: number, deleteCount: number, ...items: T[]): T[];
            delete关键字：只是将内容修改为undefined，数组的长度不会变。不推荐使用，了解即可
        改
            splice(start: number, deleteCount: number, ...items: T[]): T[];
            通过索引修改
        查
            自定义循环遍历
            高阶函数
                find(回调函数)：查询出符合条件的第一数据并返回，使用比较多
                    回调函数
                        断言函数：predicate
                includes()：判断数组是否存在某个值
                every(回调函数)：所有元素都符合条件，才返回true
                some(回调函数)：当有一个元素符合条件时，返回true
                filter(回调函数)：过滤数组，并以数组的形式返回符合条件的数据，使用比较多
                forEach(回调函数)：遍历数组，使用比较多
                map(回调函数)：遍历数组，返回新的数组
                reduce(回调函数)：求和比较多
            位置方法
                indexOf(元素)：返回该元素在数组中的索引，如果没有则返回-1，从左往右找，找到的第一元素的位置
                lastIndexOf(元素)：从右往左找，找到的第一元素的位置

            Array.from(arguments)：要掌握，ES6

     */
    let arr = [];
    let result;
    result = arr.push(1, 2, 3);
    console.log("result:", result)
    result = arr.push(4, 5);
    console.log("result:", result)
    console.log(arr);
    result = arr.unshift(10);
    console.log("result:", result)
    result = arr.unshift(20, 30);
    console.log("result:", result)
    console.log(arr);
    console.log(arr.pop())
    console.log(arr.shift());
    console.log(arr);
    arr.splice(0, 0, "5");
    arr.splice(arr.length, 0, "50");
    arr.splice(2, 1, "10");
    arr.splice(2, 0, 10);
    console.log(arr);

    for (let i = 0; i < arr.length; i++) {
        if (arr[i] >= 10) {
            console.log(arr[i]);
        }
    }
    console.log("******************************************")
    console.log(arr.find(function (value, index) {
        // console.log(value, index);
        if (value >= 10) {
            return value;
        }
    }));

    console.log(arr.includes(100));

    console.log(arr.every(function (value, index) {
        return value >= 0;
    }));

    // 产生10个在1~100之间的随机整数，保存到一个长度为10的数组中。

    // let arr1 = Array(10); // 方式一
    // let arr1 = [];// 方式二
    // for (let i = 0; i < 10; i++) {
    //     let r = Math.floor(Math.random() * 100 + 1);
    //     // arr1[i] = r; // 方式一
    //     // 方式二
    //     arr1.push(r);
    //     // arr1.unshift(r)
    //     // arr1[arr.length] = r;
    // }

    // while
    let arr2 = [];
    while (arr2.length != 10) {
        let r = Math.floor(Math.random() * 100 + 1);
        arr2.push(r);
    }
    console.log(arr2);
    let filArr = arr2.filter(function (value, index) {
        return value >= 50;
    });
    console.log(filArr); //
    let arr3 = [];
    arr2.forEach(function (value, index) {
        console.log(value, index);
        arr3.push(value * 2);
    });
    // 将arr2的数组中的所有元素都*2处理
    let arr4 = arr2.map(function (value, index) {
        return value * 2;
    })
    console.log(arr2);
    console.log(arr4);
    console.log(arr2.some(function (value, index) {
        return value >= 50;
    }));
    console.log("************************************")
    // 对arr2做求和
    let sum = 0;
    arr2.forEach(value => {
        sum += value;
    })
    console.log(sum);
    console.log(arr2.reduce(function (pre, cur, index) {
        return pre + cur;
    }, 0));

    // 迭代器
    console.log(arr2.keys());
    for (let key of arr2.keys()) {
        console.log(key);
    }
    console.log(arr2.entries());
    for (let entry of arr2.entries()) {
        console.log(entry);
    }
    for (let [key, value] of arr2.entries()) {
        console.log(key, value);
    }
    console.log(arr2.values());
    for (let value of arr2.values()) {
        console.log(value);
    }

    console.log(arr2.sort());
    console.log(arr2.sort(function (a, b) {
        return b - a;
    }));

    console.log(arr2)
    console.log(arr2.toString())
    console.log(arr2.join(" ")); // join是toString的加强版，允许自定义分隔符

    let arr5 = Array(10);
    arr5.fill(10, 0, 2);
    console.log(arr5)

    arr5.copyWithin(5,0, 2)
    console.log(arr5)

    console.log(Array.isArray("111"));
    console.log(Array.isArray(arr5));

    function t1(a, b, c) {
        console.log(arguments);
    }
    t1(1, 3, 5, 7)
</script>
</body>
</html>